package com.example.springboot.service;

import com.example.springboot.common.Page;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单表(Orders)表服务接口
 *
 * @author makejava
 * @since 2024-01-13 17:16:25
 */
public interface OrdersService {


    /**
     * 获取最近一周的订单
     *
     * @return
     */
    List<Orders> selectRecentWeek();


    /**
     * 获取所有商家信息
     *
     * @return
     */
    List<Orders> selectAll();


    /**
     * 根据ID删除
     *
     * @param id
     */
    void deleteById(Integer id);

    /**
     * 条件查询 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @return
     */
    Page<Orders> selectByPage(Integer currentPage, Integer pageSize);


    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param number
     * @param username
     * @param storeName
     * @param status
     * @return
     */
    Page<Orders> selectByManyConditionInpage(Integer currentPage, Integer pageSize, String number, String username, String storeName, String startTime, String endTime, Integer status);


    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param number
     * @param username
     * @param storeName
     * @return
     */
    Page<Orders> selectByManyConditionNoStatusInpage(Integer currentPage, Integer pageSize, String number, String username, String startTime, String endTime, String storeName);


    /**
     * 批量删除
     *
     * @param ids
     */
    void deleteByIds(List<Integer> ids);


    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    Orders selectById(Integer id);

    /**
     * // 通过orders_product关系表统计该所有商品下订单的count(*)
     *
     * @param id
     * @return
     */
    BigDecimal selectOrderCountByCategoryId(Integer id);

    long getTotal();

    Page<Orders> loadUserOrders(Integer currentPage, Integer pageSize, Integer id);

    Page<Orders> loadStoreOrders(Integer currentPage, Integer pageSize, Integer id);


    int getStoreTotal(Integer id);

    List<Orders> selectStoreRecentWeek(Integer id);

    Page<Orders> selectByPageInStore(Integer currentPage, Integer pageSize, Integer id);

    Page<Orders> getOrdersByUserId(Integer currentPage, Integer pageSize, Integer userId);

    Page<Orders> searchByPayStatusAndUserId(Integer currentPage, Integer pageSize, Integer payStatus, Integer userId);

    Orders loadOrderByOrderId(Integer orderId);

    Orders addOrders(Orders orders);

    void confirmReceipt(Integer id);

    void send(Integer id);

    User selectUserById(Integer id);
}
